//封装购物车模块
import { defineStore } from 'pinia'
import {computed, ref} from 'vue'
import {useUserStore} from './userStore'
import {insertCartAPI,findNewCartListAPI,delCartAPI} from '@/apis/cart'

export const useCartStore=defineStore('cart',()=>{

     //获取最新购物车列表
 const updateNewList=async()=>{
        const res=await  findNewCartListAPI()
          cartList.value=res.result
   
    }

    const useStore=useUserStore()
    //判断是否登录
    const isLogin=computed(()=>useStore.userInfo.token)
    //定义state-cartList
    const cartList=ref([])
    //定义action-addCart
    const addCart=async(goods)=>{
        //代表已经登录
        const {skuId,count } =goods
        if(isLogin.value){
            //登录之后加入购物车逻辑
         await  insertCartAPI({skuId,count })
         //获取最新列表
         updateNewList()



        }
        //没有登录
        else{
               //添加购物车操作
        //已添加过

        //没有添加过
        //通过匹配传递过来的sjuId能不能在cartList中找到
      const item=  cartList.value.find((item)=>goods.skuId===item.skuId)
      //代表已经添加过了
        if(item){
            item.count++
           

        }
        //没添加过
        else{
            cartList.value.push(goods)
            
        }


    }

        }
     
    //删除购物车
    const delCart=async(skuId)=>{
        if(isLogin.value){
            //调接口实现购物车中的删除功能
          await  delCartAPI([skuId])
          //获取最新列表
          updateNewList()


        }
        else{
             //删除的思路
        //找到要删除的下标值splice
        //使用数组方法 filter
    //  const idx= cartList.value.findIndex((item)=>skuId===item.skuId)
    //  cartList.value.splice(idx,1)

      cartList.value=cartList.value.filter((item)=>skuId!==item.skuId)


        }
       

    }


    //退出登录清除购物车
    const clearCart=()=>{
        cartList.value=[]
    }

   

    //计算属性
    //总的数量
    //总价，所有项目的count*price之和

    //单选功能
    const singleCheck=(skuId,selected)=>{
        //通过skuid找到要修改的那一项
      const item=  cartList.value.find((item)=>item.skuId===skuId)
        item.selected=selected

    }

    //是否全选
    const isAll=computed(()=>cartList.value.every((item)=>item.selected))

    //全选功能
    const allCheck=(selected)=>{
        //把cartList中的每一项selected都设置为当前全选框中的状态
        cartList.value.forEach((item)=>item.selected=selected)
    }


    //已选择数量
    const selectedCount=computed(()=>cartList.value.filter(item=>item.selected).reduce((a,c)=>a+c.count,0))
    const selectedPrice=computed(()=>cartList.value.filter(item=>item.selected).reduce((a,c)=>a+c.count*c.price,0))

    

  const allCount= computed(()=>cartList.value.reduce((a,c)=>a+c.count,0))
  const allPrice=computed(()=>cartList.value.reduce((a,c)=>a+c.count*c.price,0))
    return{
        addCart,
        cartList,
        delCart,
        allCount,
        allPrice,
        singleCheck,
        isAll,
        allCheck,
        selectedCount,
        selectedPrice,
        clearCart,
        updateNewList
   

    }
},{
    persist:true
})